Docker 是一種軟體平台,可讓您快速地建立、測試和部署應用程式,它將軟體封裝到容器 (Container) 的標準化單位,其中包含程式庫、系統工具、程式碼和執行時間等執行軟體所需的所有項目,使用者可以將應用程式快速地部署到各種環境並加以擴展,而且知道程式碼可以執行。從下圖可以看出,Container 比 VM 來的更輕量,更節省資源。
圖 01、Container 與 VM 的差別
關於如何安裝 EC2 可以參考 Amazon Elastic Compute Cloud (EC2) - Day08
進入 EC2 主控台,注意是否是 1. 在新加坡地區(必須要跟先前規劃的 VPC 所在區域相同), 2. 按下左手邊的執行個體後, 3. 在按下右手邊的 Launch Instance
圖 02、啟動 Amazon EC2 實例
啟動 Amazon EC2 實例需要有七個步驟,分別是:
圖 03、AMI 選擇畫面
Choose Instance Type: 這跟計算能力有關,所以也反映到收費上,要求的計算能力越高,收費越高。預設選 t2.micro
Configure Instance: 主要就是設定 EC2 實例的內容,有很多細部設定,就不一一說明,主要就是把這個實例放到公有子網 ithome public subnet 1 中,以下是需要修改的部分,其它的欄位就保持預設值即可,如下圖。
Network : vpc-0bb7004b67556d0da | ithomeVPC
Subnet : subnet-0f1df807467b642f6 | ithome public subnet 1 | ap-southeast-1a
Auto-assign Public IP : Enable
圖 04、EC2實例組態設定
Add Storage: 這相當於選擇硬碟大小,因為是安裝 Amazon Linux ,所需空間不大,保持預設值即可。 8
Add Tags: 可加可不加,通常是用在Cloud watch觀察比較方便,我們先不加。
Configure Security Group: 為提供安全保障,限制進來的連線,因為我們是建置 Web 伺服器,所以打開埠號 22 與 80。
Assign a security group: Create a new security group
Security group name: ithome_web_SG
Description: ITHOME Web server Security Group
Type: SSH, HTTP
Source: Anywhere, Anywhere
圖 05、EC2安全組設定
Review: 看一下前述的所有設定,確定無誤後就直接按下 Launch
Key pair 設定: 因為安全考量,AWS要求使用者務必要用密鑰對( key pair )的方式來進行連線,因此在啟動 EC2 前會要求建立或選擇密鑰對,下載下來的密鑰對鑰一定要好好保存,遺失後是沒辦法再重新下載的。
Create a new key pair
Key pair name: ithome
圖 06、EC2 key pair 下載
請參考 AWS 的參考手冊使用 PuTTY 從 Windows 連線至您的 Linux 執行個體,完成下列兩件事:
回到 EC2 主控台 選擇執行個體,就可以看到剛剛啟動的 Amazon EC2,找到 IPv4 Public IP 這個欄位,作為 Putty 連線之用,從圖九我們可以再次確認這個 EC 2所在的 VPC, Subnet, IPv4 Public IP, Availability zone, Security groups等資訊是否正確。
圖 07、EC2 實例內容
有 putty 遠端連線軟體、Amazon EC2、公有 IP 、以及密鑰,接著要完成的就是進行從本地端登入到雲端的 Amazon EC2,打開Putty,輸入以下資料:
Host Name( or IP address): ec2-user@13.250.62.21 (前面是登入帳號,@後面是公有IP)
Saved Sessions: ithome
圖 08、PuTTy 組態設定
接著選擇 Connection -> SSH -> Auth 選項,輸入連線設定
Private key file for Authentication: 請選擇剛剛轉換好的 .ppk 檔
圖 09、PuTTy 安全連線設定
設定完畢後再選 Session 選項,記得先按 Save 存檔,再按 Open 去進行連線,連線成功後會顯示 PuTTy 的連線警告,按下 Yes 後就可以順利連線。
圖 10、PuTTy 連線警告
在 Amazon EC2 執行個體上安裝 Docker
# 更新已安裝的套裝服務
sudo yum update -y
# 安裝最新的 Docker Community Edition
sudo amazon-linux-extras install -y docker
# 啟動 Docker 服務
sudo service docker start
# 設定 Docker 服務會自動啟動
sudo systemctl enable docker
# 將 ec2-user 新增至 docker 群組,讓您可以在不使用 sudo 的情況下執行 Docker 命令。
sudo usermod -a -G docker ec2-user
# Log out and log back in again
login ec2-user
# 驗證 ec2-user 可以執行 Docker 命令
docker info
如果上述指令操作無誤的話應該會出現以下畫面
圖 11、Docker 安裝且啟動成功
透過 PuTTy 編輯 Dockerfile,也可以在 Windows 編輯完後,透過 FileZilla 上傳到 EC2,內容如下,特別要注意的是 wget 這一行,務必要完成 S3 物件的上傳,而得到物件 URL
FROM amazonlinux:2
# 安裝相關套件
RUN yum install -y \
wget \
httpd \
php \
&& ln -s /usr/sbin/httpd /usr/sbin/apache2
# Install app
RUN rm -rf /var/www/html/* && mkdir -p /var/www/html
# 昨天放在 S3 上的檔案,務必要修改正確
RUN wget https://bucket-name.s3-ap-southeast-1.amazonaws.com/index.php
ADD index.php /var/www/html
# Configure apache
RUN chown -R apache:apache /var/www
ENV APACHE_RUN_USER apache
ENV APACHE_RUN_GROUP apache
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
接下來透過 PuTTy 在 EC2 命令列中輸入以下指令
# 從 Dockerfile 建置 Docker 影像,務必跟 Dockerfile 在相同目錄下
docker build -t ithome-container .
# 執行 docker images,驗證映像已正確建立。
docker images --filter reference=ithome-container
# 檢查伺服器的網頁伺服器是否開啟
sudo service httpd status
# 關閉伺服器的網頁伺服器
sudo service httpd stop
# 執行新建置的映像,第 1 個 80 是容器的埠號,第 2 個 80 是主機的埠號
docker run -t -i -p 80:80 ithome-container
圖 12、Docker 影像檔建置並啟動
開啟瀏覽器,然後指向執行 Docker 並託管容器的伺服器,應該會看到這個網頁內容
圖 13、Container內的網頁
References